home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-11-08 | 10.0 KB | 334 lines | [TEXT/MPS ] |
- //========================================================================================
- //
- // File: EditCmds.cpp
- // Release Version: $ 1.0d11 $
- //
- // Author: Henri Lamiraux
- //
- // Copyright: © 1993, 1995 by Apple Computer, Inc., all rights reserved.
- //
- //========================================================================================
-
- #include "ODFDraw.hpp"
-
- #ifndef EDITCMDS_H
- #include "EditCmds.h"
- #endif
-
- #ifndef DRAWSEL_H
- #include "DrawSel.h"
- #endif
-
- #ifndef BASESHP_H
- #include "BaseShp.h"
- #endif
-
- #ifndef BOUNDSHP_H
- #include "BoundShp.h"
- #endif
-
- #ifndef LINESHP_H
- #include "LineShp.h"
- #endif
-
- #ifndef OVALSHP_H
- #include "OvalShp.h"
- #endif
-
- #ifndef RECTSHP_H
- #include "RectShp.h"
- #endif
-
- #ifndef RRECTSHP_H
- #include "RRectShp.h"
- #endif
-
- #ifndef TEXTSHP_H
- #include "TextShp.h"
- #endif
-
- #ifndef DRAWPART_H
- #include "DrawPart.h"
- #endif
-
- #ifndef DRAWFRM_H
- #include "DrawFrm.h"
- #endif
-
- #ifndef DRAWLINK_H
- #include "DrawLink.h"
- #endif
-
- // ----- OS Includes -----
-
- #ifndef FWORDCOL_H
- #include "FWOrdCol.h"
- #endif
-
- // ----- OpenDoc Includes -----
-
- #ifndef SOM_Module_OpenDoc_Commands_defined
- #include <CmdDefs.xh>
- #endif
-
- //========================================================================================
- // RunTime Info
- //========================================================================================
-
- #ifdef FW_BUILD_MAC
- #pragma segment odfdrawcommand
- #endif
-
- //========================================================================================
- // CDrawEditCommand
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand constructor
- //----------------------------------------------------------------------------------------
-
- CDrawEditCommand::CDrawEditCommand (Environment *ev,
- ODCommandID commandID,
- CDrawPart* part,
- CDrawFrame* frame,
- CDrawSelection* selection,
- FW_Boolean canUndo) :
- FW_CEditCommand(ev, commandID, frame, canUndo),
- fDrawPart(part),
- fDrawSelection(selection),
- fShapeCollection(NULL),
- fSavedLink(NULL)
- {
- }
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand destructor
- //----------------------------------------------------------------------------------------
-
- CDrawEditCommand::~CDrawEditCommand()
- {
- if (fShapeCollection)
- delete fShapeCollection;
- }
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand::DoPaste
- //----------------------------------------------------------------------------------------
- void CDrawEditCommand::DoPaste(Environment *ev) // Override
- {
- fDrawSelection->AdjustSelectionAfterPaste(ev, fFrame);
- }
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand::DoPasteAs
- //----------------------------------------------------------------------------------------
- void CDrawEditCommand::DoPasteAs(Environment *ev) // Override
- {
- // Select the newly-subscribed shapes
- fSavedLink = GetDrawLinkManager(ev)->GetLatestSubscriber(ev);
- fSavedLink->SelectShapes(ev);
-
- // Offset the selection, saving the offset for later updates
- FW_CPoint offset = fDrawSelection->AdjustSelectionAfterPaste(ev, fFrame);
-
- // Save information about newly-created link
- fSavedLink->SetUpdateOffset(ev, offset);
- }
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand::CommitUndone
- //----------------------------------------------------------------------------------------
- void CDrawEditCommand::CommitUndone(Environment* ev) // Override
- {
- if (fCommandID == kODCommandPasteAs)
- GetDrawLinkManager(ev)->CommitUndone(ev, fSavedLink);
- else
- FW_CEditCommand::CommitUndone(ev);
- }
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand::SaveUndoState
- //----------------------------------------------------------------------------------------
- void CDrawEditCommand::SaveUndoState(Environment *ev) // Override
- {
- if ((fCommandID == kODCommandCut) || (fCommandID == kODCommandClear))
- {
- this->SaveShapeSelection(ev);
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand::SaveRedoState
- //----------------------------------------------------------------------------------------
- void CDrawEditCommand::SaveRedoState(Environment *ev) // Override
- {
- if (fCommandID == kODCommandPaste)
- {
- this->SaveShapeSelection(ev);
- }
- else if (fCommandID == kODCommandPasteAs)
- {
- // Newly-created link has already been saved in DoPasteAs
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand::FreeUndoState
- //----------------------------------------------------------------------------------------
- void CDrawEditCommand::FreeUndoState(Environment* ev) // Override
- {
- if (fCommandID == kODCommandCut || fCommandID == kODCommandClear)
- this->DeleteSavedShapes(ev);
- }
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand::FreeRedoState
- //----------------------------------------------------------------------------------------
- void CDrawEditCommand::FreeRedoState(Environment* ev) // Override
- {
- if (fCommandID == kODCommandPaste)
- this->DeleteSavedShapes(ev);
- }
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand::UndoIt
- //----------------------------------------------------------------------------------------
- void CDrawEditCommand::UndoIt(Environment *ev) // Override
- {
- FW_CEditCommand::UndoIt(ev); // call inherited
-
- switch (fCommandID)
- {
- case kODCommandCut:
- case kODCommandClear:
- this->RestoreShapeSelection(ev);
- break;
-
- case kODCommandPaste:
- this->RemoveShapeSelection(ev);
- break;
-
- case kODCommandPasteAs:
- GetDrawLinkManager(ev)->UndoPasteAs(ev, fSavedLink);
- break;
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand::RedoIt
- //----------------------------------------------------------------------------------------
- void CDrawEditCommand::RedoIt(Environment *ev) // Override
- {
- FW_CEditCommand::RedoIt(ev); // call inherited
-
- switch (fCommandID)
- {
- case kODCommandCut:
- case kODCommandClear:
- this->RemoveShapeSelection(ev);
- break;
-
- case kODCommandPaste:
- this->RestoreShapeSelection(ev);
- break;
-
- case kODCommandPasteAs:
- GetDrawLinkManager(ev)->RedoPasteAs(ev, fSavedLink);
- break;
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand::RemoveShapeSelection
- //----------------------------------------------------------------------------------------
- void CDrawEditCommand::RemoveShapeSelection(Environment *ev)
- {
- // First, empty the selection
- fDrawSelection->CloseSelection(ev);
-
- // Select the saved shapes
- this->SelectSavedShapes(ev);
-
- // Clear the selected shapes
- fDrawSelection->ClearSelection(ev);
- }
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand::RestoreShapeSelection
- //----------------------------------------------------------------------------------------
- void CDrawEditCommand::RestoreShapeSelection(Environment *ev)
- {
- // First, empty the selection
- fDrawSelection->CloseSelection(ev);
-
- // Add the saved shapes back into the part
- FW_COrderedCollectionIterator ite(fShapeCollection);
- for (CBaseShape* shape = (CBaseShape*)ite.First(); ite.IsNotComplete(); shape = (CBaseShape*)ite.Next())
- {
- shape->RestoreShape(ev, fDrawPart);
- }
-
- // Add the saved shapes to the selection
- this->SelectSavedShapes(ev);
- }
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand::SaveShapeSelection
- //----------------------------------------------------------------------------------------
- void CDrawEditCommand::SaveShapeSelection(Environment *ev)
- {
- // Save references to selected shapes
- fShapeCollection = new FW_CPrivOrderedCollection;
-
- // Copy shape pointers from fDrawSelection
- FW_COrderedCollectionIterator ite(fDrawSelection->GetSelectionCollection());
- for (CBaseShape* shape = (CBaseShape*)ite.First(); ite.IsNotComplete(); shape = (CBaseShape*)ite.Next())
- {
- fShapeCollection->AddLast(shape);
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand::SelectSavedShapes
- //----------------------------------------------------------------------------------------
- void CDrawEditCommand::SelectSavedShapes(Environment *ev)
- {
- // Add the shapes in fShapeCollection to fDrawSelection
- FW_COrderedCollectionIterator ite(fShapeCollection);
- for (CBaseShape* shape = (CBaseShape*)ite.First(); ite.IsNotComplete(); shape = (CBaseShape*)ite.Next())
- {
- fDrawSelection->AddToSelection(ev, shape, FALSE);
- fDrawSelection->RedrawShape(ev, shape);
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand::DeleteSavedShapes
- //----------------------------------------------------------------------------------------
- void CDrawEditCommand::DeleteSavedShapes(Environment *ev)
- {
- CBaseShape* shape;
-
- // before deleting the shape check if they are not promised
- FW_COrderedCollectionIterator ite(fShapeCollection);
- for (shape = (CBaseShape*)ite.First(); ite.IsNotComplete(); shape = (CBaseShape*)ite.Next())
- {
- shape->CheckPromise(ev, fDrawPart);
- }
-
- // ----- Delete all the shapes -----
- while ((shape = (CBaseShape*)fShapeCollection->First()) != NULL)
- {
- fShapeCollection->Remove(shape);
- delete shape;
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CDrawEditCommand::GetDrawLinkManager
- //----------------------------------------------------------------------------------------
- CDrawLinkManager* CDrawEditCommand::GetDrawLinkManager(Environment* ev) const
- {
- return (CDrawLinkManager*) fPart->GetLinkManager(ev);
- }
-